// import { asyncRoutes, constantRoutes } from '@/router'

/**
 * Use meta.role to determine if the current user has permission
 * @param roles
 * @param route
 */
// function hasPermission(roles, route) {
//   if (route.meta && route.meta.roles) {
//     return roles.some(role => route.meta.roles.includes(role))
//   } else {
//     return true
//   }
// }

/**
 * Filter asynchronous routing tables by recursion
 * @param routes asyncRoutes
 * @param roles
 */
export function filterAsyncRoutes(routes, roles) {
	const res = [];

	routes.forEach(e => {
		if (roles.includes(e.path)) {
			if (e.children) {
				e.children = filterAsyncRoutes(e.children, roles);
				if (e.children.length > 0) {
					res.push(e);
				};
			} else {
				res.push(e);
			};
		} else if (e.children && e.children.length > 0) {
			e.children = filterAsyncRoutes(e.children, roles);
			if (e.children.length > 0) {
				res.push(e);
			};
		} else if (e.path === '*') {
			res.push(e);
		};
	});

	return res;
};

const state = {
	routes: [],
	addRoutes: []
};

const mutations = {
	SET_ROUTES: (state, routes) => {
		state.addRoutes = routes;
		state.routes = constantRoutes.concat(routes);
	}
}

const actions = {
	generateRoutes({ commit }, routers) {
		return new Promise(resolve => {
			var accessedRoutes = filterAsyncRoutes(asyncRoutes, routers);
			commit('SET_ROUTES', accessedRoutes);
			resolve(accessedRoutes);
		});
	}
}

export default {
	namespaced: true,
	state,
	mutations,
	actions
};
